Generally, a computer program is first written in a programming language such as C++ or Java, and is then compiled into a binary code, which may be executed on a computer. When a computer program is being executed on a computer, the binary code is often too large for loading in its entirety into physical memory. To facilitate execution, the binary code may be divided into various sets of code blocks. Certain code blocks that are needed during runtime are loaded into physical memory while other code blocks that are not needed immediately are not loaded into physical memory until needed. This concept is called “virtual memory.” A set of code blocks that is loaded into physical memory for program execution is called a working set.
When a particular code block that is not in physical memory is needed during execution of a computer program, a working set that includes the particular code block that is needed is loaded into physical memory. Another working set that is not needed for execution is moved from physical memory to virtual memory to free memory space for the needed working set. This process of swapping working sets between physical memory and virtual memory is called paging. Too much paging is undesirable because it slows down the execution of a computer program.
With existing systems, when a computer program is compiled, a compiler generally does not take into consideration how a computer program is executed. In particular, code blocks are often arranged arbitrarily in a binary code. Consequently, code blocks that are needed sequentially during runtime may not be located in close proximity in memory space, which may result in excessive paging. A method of arranging a binary code to effectively minimize paging eludes those who are skilled in the art.